# -*- coding: utf-8 -*-
######
#
# interfaz.py
# 
# Clase de conección con el usuario a través de interfaz gráfica. 
#
# Alejandra Josué 11496
# Benito Maza 11088
# Jorge Lainfiesta 11142 
# 18/Abr/2011
#
######
# -*- coding: cp1252 -*-
import Tkinter
import tkMessageBox
from Tkconstants import *
from easygui import *
import sys
from activity import activity
from agenda import agenda

ag = agenda()

#Clase que contiene las ventanas de aplicación.
class myWindow:

    #Se inicializan los widgets o ventanas. 
    def __init__(self):
        self.mw = Tkinter.Tk()
        self.mw.title("Bienvenido!")
        self.mw.option_add("*font", ("Arial", 14, "bold"))
        self.mw.geometry("+250+200")

        self.lab1 = Tkinter.Label(self.mw, text = "Bienvenido Usuario!. \nSeleccione la opción que desee realizar.\n")
        self.lab1.pack()

        self.mw.option_add("*font", ("Arial", 12, "normal"))
        self.rb1 = Tkinter.Button(self.mw, text = "Crear Usario", command = self.btnClick)
        self.rb2 = Tkinter.Button(self.mw, text = "Iniciar Sesión", command = self.btnClick2)

        self.rb1.pack()#Muestra los botones
        self.rb2.pack()

        self.btn2 = Tkinter.Button(self.mw, text = "Salir", command = self.mw.destroy)
        self.btn2.pack(side = RIGHT)

        self.mw.mainloop()

    #Esta funcion es llamada cuando se desea crear un usuario. Pide un nombre de usuario y contraseña y lo agrega. 
    def btnClick(self):

        self.mw.destroy()#Cierra la ventana que se encontraba abierta antes.
        self.mw = Tkinter.Tk()
        self.mw.title("Crear Usuario")
        self.mw.option_add("*font", ("Arial", 12, "bold"))
        self.mw.geometry("+250+200")

        self.lab1 = Tkinter.Label(self.mw, text = "Cree su cuenta.\n\nIngrese un nombre de usuario")
        self.lab1.pack()

        self.mw.option_add("*font", ("Arial", 12, "normal"))
        self.entr1 = Tkinter.Entry(self.mw)
        self.entr1.pack()

        self.mw.option_add("*font", ("Arial", 12, "bold"))
        self.lab2 = Tkinter.Label(self.mw, text = "Ingrese una contraseña")
        self.lab2.pack()

        self.mw.option_add("*font", ("Arial", 12, "normal"))
        self.entr2= Tkinter.Entry(self.mw, show = "*")
        self.entr2.pack()

        self.btn2 = Tkinter.Button(self.mw, text = "Continuar", command = self.btnClick3)
        self.btn2.pack(side = RIGHT)

        self.btn2 = Tkinter.Button(self.mw, text = "Cancelar", command = self.mw.destroy)
        self.btn2.pack(side = RIGHT)

    #Esta función es llamada cuando se desea iniciar sesión. El usuario ingresas su nombre y contraseña. 
    def btnClick2(self):

        self.mw.destroy()
        self.mw = Tkinter.Tk()
        self.mw.title("Iniciar Sesion")
        self.mw.option_add("*font", ("Arial", 12, "bold"))
        self.mw.geometry("+250+200")

        self.lab1 = Tkinter.Label(self.mw, text = "Ingrese su nombre de usuario")
        self.lab1.pack()

        self.mw.option_add("*font", ("Arial", 12, "normal"))
        self.entr1 = Tkinter.Entry(self.mw)
        self.entr1.pack()

        self.mw.option_add("*font", ("Arial", 12, "bold"))
        self.lab2 = Tkinter.Label(self.mw, text = "Ingrese su contraseña")
        self.lab2.pack()

        self.mw.option_add("*font", ("Arial", 12, "normal"))
        self.entr2= Tkinter.Entry(self.mw, show = "*")
        self.entr2.pack()

        self.btn2 = Tkinter.Button(self.mw, text = "Continuar", command = self.btnClick4)
        self.btn2.pack(side = RIGHT)

        self.btn2 = Tkinter.Button(self.mw, text = "Cancelar", command = self.mw.destroy)
        self.btn2.pack(side = RIGHT)


    #Esta función comprueba que el usuario creado sea valido y no exista anteriormente. 
    def btnClick3(self):
        global ag
        
        registrar = ag.registro(self.entr1.get(), self.entr2.get())
        
        if(registrar):
            self.mw.option_add("*font", ("Arial", 12, "normal"))
            tkMessageBox.showinfo(title = "Felicidades", message = self.entr1.get()+", usted ha sido agregado/a exitosamente. \nPresione aceptar.")
            self.mw.destroy()
            app = myWindow()
        else:
            self.mw.option_add("*font", ("Arial", 12, "normal"))
            tkMessageBox.showinfo(title = "Error", message = "El nombre que ha ingresado ya existe. \nIntentelo nuevamente.")
            self.btnClick()

    #Esta funcion comprueba que el usuario y contraseña ingresados sean los correctos. 
    def btnClick4(self):
        global ag
        login = ag.login(self.entr1.get(), self.entr2.get())#el método .get() vuelve el input un string de Python

        if(login):
            self.mw.destroy()
            self.Menu()
        else:
            self.mw.option_add("*font", ("Arial", 12, "normal"))
            tkMessageBox.showinfo(title = "Error", message = "Lo sentimos, su usuario y/o contrasena son incorrectos. \nIntentelo nuevamente.")
            self.btnClick2()
    def Menu(self):
        #Mensaje de bienvenida a usuarios loggeads
        msg = "     Bienvenido a su Agenda Personal.\nSeleccione la opcion que desee realizar"
        title = "Agenda Personal"
        choices = ["Manejar Actividades", "Ver Actividades", "Salir de mi agenda"]
        choice = buttonbox(msg,title,choices)
        global ag
        
        #Manejar actividades
        if choice == "Manejar Actividades":
            msg = "Mientras maneja sus actividades recuerde: \n\n«La clave de la eficacia es el orden». \n\nSeleccione una de las siguientes opciones::"
            title = "Manejar Actividades"
            choices = ["Agregar Actividad", "Eliminar Actividad", "Menu Principal"]
            choice = buttonbox(msg,title,choices)
            
            #Agregar actividad
            if choice == "Agregar Actividad":
              title = "Agregar Actividad"
              nueva = activity()
              nueva.name = enterbox("Ingrese el nombre de una actividad", title)
              if nueva.name == None:
                  self.Menu()
              nueva.description = enterbox("Agregue una descripción a su actividad", title)
              if nueva.description == None:
                  self.Menu()
              fecha = enterbox("Ingrese la fecha en que será llevada a cabo su actividad (dd/mm/yyyy)", title)
              if fecha == None:
                  self.Menu()
              print "fecha ",fecha
              comprobacion = nueva.parseDate(fecha)#comprueba que el formato de la fecha sea el correcto.
              while comprobacion == False:
                  fecha = enterbox("Usted ha ingresado un formato erróneo. Ingrese la fecha en que será llevada a cabo su actividad (dd/mm/yyyy)", title)
                  comprobacion = nueva.parseDate(fecha)
                  if fecha == None:
                      self.Menu()
              nueva.date = comprobacion

              
              ag.add(nueva)
              msgbox("Se ha agregado la actividad", title)
              self.Menu()
            
            #Eliminar actividad
            elif choice == "Eliminar Actividad":
               title = "Eliminar Actividad"
               buscar = activity()
               buscar.name = enterbox("Ingrese el nombre de una actividad", title)
               if buscar.name == None:
                   self.Menu()
               encontradas = ag.find(buscar)
               if encontradas == None:
                  msgbox("No se han encontrado actividades con nombre '"+buscar.name+"'", title)
                  self.Menu()
               else:
                  msg ="¿Qué actividad quiere eliminar?"
                  title = "Eliminar actividad"
                  choices = []
                  for acti in encontradas:
                     comp = acti.name+", "+acti.description+", es para el "+acti.getStringDate(acti.date)+"."
                     print comp
                     choices.append(comp)
                  choice = choicebox(msg, title, choices)
                  elimin = encontradas[choices.index(choice)]
                  print elimin.id," ",elimin.name
                  #global ag
                  ag.delete(elimin)
                  msgbox("Se ha eliminado la actividad", title)
                  self.Menu()
            else:
               self.Menu()
        
        #Ver actividades
        elif choice == "Ver Actividades":
            msg = "Mientras observa sus actividades recuerde: \n\n«Para buena vida, orden y medida». \n\nSeleccione una de las siguientes opciones::"
            title = "Ver Actividades."
            choices = ["Ver actividad", "Menu Principal"]
            choice = buttonbox(msg,title,choices)
            
            numero_act = enterbox("Ingrese la cantidad de actividades que desea ver", title)
            if numero_act == None:
                    self.Menu()
            ver = activity()
            comprobacion = ver.parseInt(numero_act)
                
            while comprobacion == False:
               numero_act = enterbox("Debe ingresa un número entero que represente la cantidad de actividades que desea ver", title)
               if numero_act == None:
                    self.Menu()
               comprobacion = ver.parseInt(numero_act)
               
            actividades = ag.show(comprobacion)
            text = ""
            for act in actividades:
               text+= act.name+", "+act.description+". Es para el "+act.getStringDate(act.date)+"\n"
            msgbox(text, title)
            self.Menu()
            
        else: 
            sys.exit(0)   

#Correr el programa
if __name__ == "__main__":
   app = myWindow()
